package com.cskaoyan.javase.oop2._1extends._6restriction;

/**
 * 继承限制，主要解决几个问题：
 *      1.父类中的私有成员能不能继承？
 *          实际上是继承了，但是没有访问权限，没办法直接访问
 *          看起来就好像没有继承
 *
 *      2.父类的构造器能不能继承？
 *          首先构造器不能算成员，况且构造方法也不是普通方法，继承过来干嘛呢？构造器是不能被继承的。
 *
 *      3.静态成员能不能继承？
 *          静态成员是属于类的，不管有没有继承，某个类的静态成员就属于这个类
 *          如果存在继承后，实际上是父子类共用了父类的同一个静态成员
 *          这不是继承，是共用。
 *          继承不考虑静态成员，继承是对象之间的事情，考虑普通成员。
 *
 *
 * 何时使用继承？
 *不要盲目的去使用继承，尤其不要单纯为了复用代码，而使用继承。
 * 使用继承应该严格考虑两个类是否具有"is-a"关系！
 *
 *教师类继承人类，学生类继承人类是可以理解的，也是符合继承的思想的（is-a）。
 * 但是教师类中有姓名、年龄属性，学生类也需要这些成员，能单纯为了复用成员，让学生类继承教师类吗？显然不行！
 *
 *在实际开发中，在开发前的会议讨论，需求策划上，一定要认真分析程序中类的关系，避免出现错误的继承。
 *
 * @since 15:42
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Son s = new Son();
        // 'num' has private access in 'com.cskaoyan.javase.oop2._1extends._6restriction.Father'
        // System.out.println(s.num);
        System.out.println(s.getNum());

        System.out.println("-----------------");
        System.out.println(Father.str);
        System.out.println(Son.str);
        Father.str = "666";
        System.out.println(Son.str);
    }
}

class Father {
    private int num = 100;
    static String str = "hello";

    // 写一个num的公共的Getter方法
    public int getNum() {
        return num;
    }
}

class Son extends Father {
}
